1
手動メモリ管理の落とし穴
AI013Lesson 5
00:00

手動メモリ管理は new および delete は脆い 「責任の契約」を構築します。プログラマーは、早期リターンや例外を含むすべての実行パスを完璧に予測しなければならず、リソースが解放されることを保証する必要があります。このアプローチはシステム全体の障害に陥りやすいです。

システム的な失敗

  • リークの罠: 複雑な論理(if-else、switch文)では、各 new に対応する delete を忘れることがシステムのパフォーマンスを時間とともに劣化させます。
  • ポインタの無効化: Dangling Pointers(削除後のメモリアクセス)や ダングリングポインタ などは、未定義動作とセキュリティ上の脆弱性を引き起こします。 二重解放 は未定義動作とセキュリティ上の脆弱性を引き起こします。
  • 例外安全: 割り当てと解放の間に例外が発生した場合、 delete は完全にスキップされます。
new char[]X早期リターン(リーク)X例外(リーク)デファウザ(• std::unique_ptr• std::shared_ptr• std::weak_ptr

進化

C++11/14では、 <memory> ヘッダーを刷新し、『裸のポインタ』から離れ、コンパイラレベルで安全性を強制する自動所有モデルへと移行しました。

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>